package com.zyh.scs.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zyh.scs.admin.api.dto.open.TransactionDetailDTO;
import com.zyh.scs.admin.api.dto.open.*;
import com.zyh.scs.admin.api.vo.UserCompanyVO;
import com.zyh.scs.admin.api.vo.open.*;
import com.zyh.scs.admin.base.open.*;
import jakarta.servlet.http.HttpServletRequest;

import java.util.List;

public interface UserAccountOpenService {

    /**
     * 验证账户有效性及查询余额接口
     */
    LaoSheCheckResponse<UserAccountVO> checkUserAccount(UserAccountDto userAccountDto, HttpServletRequest request);

    /**
     * 获取个人串码接口 通过手机号
     */
    LaoSheResponse<String>  getUserCode(UserPhoneDTO userPhoneDTO, HttpServletRequest request);

    /**
     * 个人码查询用户信息接口
     */
    LaoSheResponse<UserAccountVO> getCodeToInfo(UserCodeDTO userCodeDTO, HttpServletRequest request);

    /**
     * 获取token
     */
    LaoSheResponse<String> sendToken(String userPhone, HttpServletRequest request);

    /**
     * 通过token获取用户信息
     */
    LaoSheResponse<UserAccountVO> queryAccountByToken(String token, HttpServletRequest request);

    /**
     * 查询用户分页列表接口
     */
    LaoSheAccountTotalResponse<List<UserAccountVO>> userAccountPageList(UserAccountPageDTO dto, HttpServletRequest request);

    /**
     * 用户信息同步接口
     */
    LaoSheResponse<String> userAccountSync(UserSyncDTO dto, HttpServletRequest request);

    /**
     * 机构信息同步接口
     */
    LaoSheResponse<String> userDeptSync(DeptSyncDTO dto, HttpServletRequest request);

    /**
     * 订单扣费接口
     */
    LaoSheResponse<UserDeductionVO> deduction(UserDeductionDTO dto, HttpServletRequest request);

    /**
     * 交易流水查询
     */
    LaoSheResponse<TransactionDetailVO> transactionDetail(TransactionDetailDTO dto, HttpServletRequest request);


    /**
     * 充值流水查询接口
     */
    LaoSheResponse<TransactionDetailVO> payDetail(TransactionDetailDTO dto, HttpServletRequest request);

    /**
     * 订单退款接口
     */
    LaoSheResponse<OrderInfoExDto> orderRefund(OrderRefundDTO dto, HttpServletRequest request);

    /**
     * 订单撤销接口
     */
    LaoSheResponse<OrderInfoExDto> cancel(OrderCancelDTO dto, HttpServletRequest request);

    /**
     * 支付码扣费接口
     */
    LaoSheResponse<UserDeductionVO> qrCodeDeduction(QrCodeDeductionDTO dto, HttpServletRequest request);

    /**
     * 订单详情查询
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<OrderDetailVO> detail(OrderDetailDTO dto, HttpServletRequest request);

    /**
     * 交易流水查询接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<TransactionDetailVO> transactionFlow(TransactionDetailDTO dto, HttpServletRequest request);

    /**
     * 交易流水查询接口 (好店专用)
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<Page<TransactionFlowVO>> transactionFlowHaoDian(TransactionFlowDTO dto, HttpServletRequest request);

    /**
     * 充值流水查询接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<RechargeFlowDetailVO> rechargeFlowDetail(TransactionDetailDTO dto, HttpServletRequest request);

    /**
     * 绑卡/解绑接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<UserBindCardVO> bindCard(UserBindDTO dto, HttpServletRequest request);

    /**
     * 物理卡信息同步接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheDateResponse<String> syncCardId(SyncCardIdDTO dto, HttpServletRequest request);

    /**
     * 新增编外员工接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<UserGuidVO> addExtraStaff(UserAddExtraStaffDTO dto, HttpServletRequest request);

    /**
     * 新增/修改编外机构信息接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<UserDeptIdVO> syncExternalDepartment(SyncExtDepartmentDTO dto, HttpServletRequest request);

    /**
     * 物理卡/福利账户充值接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheDateResponse<String> syncCardIdRecharge(CardIdRechargeDTO dto, HttpServletRequest request);

    /**
     * 物理卡/福利账户批量充值接口 (满客宝不用)
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<List<String>> batchRecharge(CardIdBatchRechargeDTO dto, HttpServletRequest request);


    /**
     * 现金账户充值接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheTimeResponse<String> syncCashRecharge(CashRechargeDTO dto, HttpServletRequest request);


    /**
     * 物理卡解绑操作
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<String> cardIdUnbound(UserCardIdUnboundDTO dto, HttpServletRequest request);


    /**
     * 见习转正接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<ChangeToNormalVO> changeToStaff(ChangeToNormalDTO dto, HttpServletRequest request);


    /**
     * 福利卡/现金账户充值撤销接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheCallResponse<String> rollBackRecharge(RollBackRechargeDTO dto, HttpServletRequest request);

    /**
     * 福利卡/现金账户提现接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheCallResponse<String> withdrawal(WithdrawalDTO dto, HttpServletRequest request);

    /**
     * 注册回调接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<OrderDeductionVO> register(CallbackUrlDTO dto, HttpServletRequest request);


    /**
     * 报表接口
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<List<FinanceVO>> financeList(FinanceDTO dto, HttpServletRequest request);

    /**
     * 冻结/解冻
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<String> freezeOperate(UserFreezeDTO dto, HttpServletRequest request);


    /**
     * 用户有效性校验
     *
     * @param dto
     * @param request
     * @return
     */
    LaoSheResponse<Integer> userCheck(UserCheckDTO dto, HttpServletRequest request);

    List<UserCompanyVO> getDept(Long id);
}
